home *** CD-ROM | disk | FTP | other *** search
- Signal Processing Packages and Notebooks
- for the Mathematica Environment
-
- Brian Evans and James McClellan
- Digital Signal Processing Group
- School of Electrical Engineering
- Georgia Institute of Technology
- Atlanta, GA 30332-0250
-
- EMAIL: evans@eedsp.gatech.edu
-
-
- Since the version of the signal processing packages released by
- The Mathematica Journal, I have made changes to just about every file.
- The major changes implemented by the new version of the signal
- processing packages are discussed in the SignalProcessingExamples
- notebook, but they are summarized here:
-
-
- -------------------------- Version 2.0 ----------------------------------
-
- (1) added object SignalPlot that plots the real and imaginary components
- of a 1-D function simultaneously on the same plot, as well as
- Dirac delta functions. It also plots 2-D signals. (The signal
- processing packages already plot 1-D discrete-time functions in
- lollipop style via DiscreteGraphics.)
-
- (2) the option Dialogue -> All now works for the forward bilateral Laplace
- transform (which means that all transform rule bases can completely
- justify their answers)
-
- (3) can plot upsampled sequences again
-
- (4) unified piecewise convolution (either function can be in list
- or expression form)
-
- (5) added many transform pairs to the continuous-time Fourier transform
- rule bases CTFTransform and InvCTFTransform
-
- (6) the Fourier transform rule bases now handle the convolution operator:
- CTFTransform[ Convolve[t][CPulse[1, t + 1/2], CPulse[1, t + 1/2]], t, w ]
-
- (7) RootLocus plots a root locus for one varying parameter
-
- (8) CFIR and CIIR structures have an optional third argument: Roots -> roots.
- Change is reflected in AnalogFilters notebook.
-
- (9) Computational objects for IIR structures, called IIRFunction, now exist.
- Also, FIR structures can be rewritten as a formula. Their values
- can now be plotted. Values are calculated as they are needed, and
- IIRFunction remembers (caches) previous calculations.
-
- (10) SequencePlot now provides a standard way to plot discrete-time expressions
-
- (11) Mathematica 1.2 has a problem performing partial fractions decomposition
- on real-valued polynomials even if you do all the factoring yourself.
- So, we have added a new option to the InvLaPlace object called Apart.
- If set to All, then we kludge around the Apart deficiency so that
- a partial fractions decomposition is formed. Otherwise, we inverse
- transform the function as an continuous-time IIR filter whose input
- is the inverse transform of the numerator. This is made possible
- by a new function called MyApart (see below).
-
- (12) The z-transform of IIR structures returns a valid region of convergence.
-
- (13) RealQ[z] returns True if and only if the head (tag) of z is Real.
- We have added RealValuedQ[z] which returns True if the imaginary
- component of z is 0 or 0.0 (this behaves the way RealQ used to).
-
-
- -------------------------- Version 2.1 ----------------------------------
-
- (14) ZSolve, a difference equation solver, is more robust. ZSolve can
- also justify its answers in the same way as the transforms do.
-
- (15) DTFT of Step[n] is now correct (was missing a pi term).
-
- (16) LSolve can also justify its answers in the same way as the transforms do.
-
- (17) Convolution is now represented by more than one operator.
- Linear convolution in the discrete domain is Convolve[n] and
- linear convolution in the continuous domain is CConvolve[t].
-
-
- -------------------------- Version 2.2 ----------------------------------
-
- (18) Discrete-time convolution is now implemented.
-
- (19) New notebook called "SignalProcessingIntroduction" serves as an
- introduction to Mathematica as well as DSP.
-
- -------------------------- Version 2.21 ---------------------------------
-
- (20) SequencePlot for 2-D signals now samples functions at integer
- indices.
-
- -------------------------- Version 2.22 ---------------------------------
-
- (21) Stable will resolve stability of non-separable signals more often
- (e.g., Stable will return False when applied to the z-transform of
- (1/2)^n1 (4/5)^n2 Multinomial[n1,n2] Step[n1,n2]
- instead of an unresolved expression.)
-
- -------------------------- Version 2.23 ---------------------------------
-
- (22) Cleaned up descriptions and implementation of parameterized operators
- like Shift, Upsample, and Z.
-
-
- -------------------------- Version 2.3 ----------------------------------
-
- (23) The TransformLookup option for the transform rule bases allows one
- to specify additional transform pairs. This is useful when a trans-
- form rule base does not contain a pair that you need. It is also
- useful for transforming abstract functions (i.e., saying that x[n]
- becomes X[z]). For example,
-
- In:= ZTransform[a^n x[n], n, z, TransformLookup -> { x[n] :> X[z] }]
-
- Out= ZTransData[ X[a z], Rminus[0], Rplus[Infinity], ZVariables[z]]
-
- The N-dimensional case is not as straightforward because each
- transform rule base applies a one-dimensional rule base N times
- in the order that the N time variables are given. Therefore,
- users must specify intermediate transform pairs:
-
- In:= LaPlace[ x[t1,t2], {t1,t2}, {s1,s2},
- TransformLookup -> { x[t1,t2] :> X1[s1,t2],
- X1[s1,t2] :> X[s1,s2 } ]
- Out= LTransData[ X[s1, s2], Rminus[{0, 0}],
- Rplus[{Infinity, Infinity}], LVariables[{s1, s2}] ]
-
- Here, X1[s1, t2] denotes the Laplace transform of x[t1,t2] with
- respect to the first variable t1. It turns out that you could use
- X instead of X1 and the transform will still work out correctly.
- (This has been made simpler--- see Version 2.69).
-
- -------------------------- Version 2.31 ---------------------------------
-
- (24) Debugged the TeX forms of the signals (functions) and systems
- (operators) introduced by the signal processing packages, esp.
- their multidimensional forms.
-
- (25) Added AllSubsets function which returns all of the possible subsets
- of a set. For example, AllSubsets[ {v1,v2,v3} ] returns
- { v1, v2, v3, {v1, v2}, {v1, v3}, {v2, v3}, {v1, v2, v3} }.
- Similarly, AllSubsets[ {v1, v2, v3}, Plus] returns
- { v1, v2, v3, v1 + v2, v1 + v3, v2 + v3, v1 + v2 + v3 }.
-
- ------------------------- Version 2.32 --------------------------------
-
- (26) The Laplace transform of (t - 1) CStep[t] was incorrect. It returned
- the same transform as (t - 1) CStep[t - 1] did. One rule was patched
- in "LaPlace.m".
-
- (27) The inverse Laplace transform cannot handle complex-valued roots
- of a rational polynomial because of limitations of 1.2 Mathematica's
- Apart function. We have encoded a new function MyApart which
- works around the problem but it is very, very slow. Now, inverse
- transforms of functions like "s / ( s^2 + 4 )^2" are possible.
-
- ------------------------- Version 2.33 --------------------------------
-
- (28) The inverse Laplace transform was not always correctly inverting
- terms that corresponded to integration in the time domain. Patched
- one rule and added another to the post-processing rules.
-
- (29) The primitive MyApart did not normalize the coefficient of the
- highest power term in the denominator before rooting it.
-
- ------------------------- Version 2.34 --------------------------------
-
- (30) The inverse Laplace transform was still not always correctly inverting
- terms that corresponded to integration in the time domain. Patched
- one rule and added another to the post-processing rules.
-
- ------------------------- Version 2.4 --------------------------------
-
- (31) Integrating Delta functions over a finite interval did not work
- when the coefficient on the variable was one. Fixed.
-
- (36) The routines supporting the rules for multirate multidimensional
- signal processing (i.e., lattice and integer matrix theory) have
- been gathered in "Multirate.m" in the Support directory, including
- "DistinctCosetVectors", "SmithNormalForm", and "SmithReducedForm".
-
- (33) Inverse z-transforms of affine log functions are fixed.
-
- (34) WORKS UNDER ALL VERSIONS OF MATHEMATICA NOW!!!!!
- In making sure that the signal processing packages work for BOTH
- Mathematica 1.2 and 2.0, the following changes have taken place:
- (a) aliases have been discontinued so the former aliased objects
- AliasedSinc, AliasSinc, ASinc, InverseLaPlaceTransform,
- LaPlaceTransform, and MagnitudePhasePlot are now set equal to
- Dirichlet, Dirichlet, Dirichlet, InvLaPlace, LaPlace, and
- MagPhasePlot, respectively. Pretty much a transparent change.
- Added new alias: RootLocusPlot for RootLocus.
- (b) Mathematica 2.0 has a new undocumented function called ListQ
- which replaces the one provide by us (our definition for ListQ
- is still used for Mathematica 1.2 and lower).
- (c) Mathematica 2.0 represents collections (headless expressions
- like "(0,2,1,0)") using the head (data tag) Sequence.
- So, ToCollection has been modified to return a collection
- with the proper syntax under both Mathematica 1.2 and 2.0.
- As an indirect result, the functions GetAllExponents and
- GetAllFactors have been rewritten to return lists instead
- of collections. We have removed the function ExtractVariables,
- but GetVariables was kept so use it instead.
- (d) The evaluation strategy for the Which construct has changed.
- Now, each conditional statement in the construct MUST evaluate
- to True or False. We now force all of our Which conditional
- statements to evaluate to True or False by using TrueQ.
-
- (35) Mathematica 2.0 offers the DeclarePackage which allows one to specify
- the objects defined by a package. That way, when a user invokes
- a new primitive, Mathematica 2.0 will automatically load the
- package that defines it and then continue evaluating the expression.
- This works for most objects but does not handle the case where
- additional packages build up a definition incrementally.
- The initialization files "Analog.m", "Digital.m", and "Support.m"
- now only define the ``stubs'' for the objects in the analog, digital,
- and support signal processing packages, respectively. This means
- that you can place Needs[ "SignalProcessing`SignalProcessing`" ]
- in the initialization file without noticeably slowing down the
- initialization process. That way, students can go about their
- business without having to know which packages to load in beforehand.
-
- (36) One warning about Mathematica 2.0: it now assumes that variables
- represent complex (instead of real) numbers, so Sqrt[x^2] remains
- unsimplified. Although this is usually beneficial, this assumption
- sometimes clashes when you want to treat a variable as real-valued.
- For example, Plot[ x^(1/3), {x, -5, 5} ] cannot handle x in [-5, 0)
- because it takes the wrong branch cut at the origin which can be
- seen by plotting the real part of x^(1/3). It does plot the
- correct curve over x in [0, 5].
-
- (37) For the most part, the notebook interface in 2.0 is upwardly
- compatible with that of Mathematica 1.2. However, 2.0 includes the
- preamble with all PostScript graphics now (an extra 20 kb of
- information per graphics cell) so some of our notebooks, like the
- piecewise convolution, will double in size. This change caused us
- to break up the z-transform notebook into three notebooks.
-
- ------------------------- Version 2.41 --------------------------------
-
- (38) MagPhasePlot no longer generates a "Set::raw" warning message.
- and can plot Delta functions that appear in the frequency response
- (including impulse trains).
-
- (39) The inverse Laplace transform finally works identically under
- Mathematica 1.2 and 2.0. The main problem was that the partial
- fractions primitive Apart no longer normalized polynomials in
- denominators so the resulting denominators failed to match any
- of the transform pairs.
-
- (40) Added SPSimplify which applies simplification rules for signal
- processing expressions. It supports a dialogue option.
-
- (41) SequencePlot displays the "lollipops" more boldly and adapts
- their widths according to the number of samples plotted.
-
- ------------------------- Version 2.42 --------------------------------
-
- (42) New tutorial notebook on the discrete-time Fourier transform.
-
- (43) SPSimplify failed to return if Dialogue was enabled.
-
- (44) Apart in Mathematica 2.0 does not handle non-rational polynomials
-
- (45) SignalPlot, SequencePlot, and MagPhasePlot are more robust
- under Mathematica 2.0:
-
- (46) ASPAnalyze and DSPAnalyze uses more descriptions for the
- analyses that they perform. They are also immune to changes
- in the Global environment.
-
- ------------------------- Version 2.43 --------------------------------
-
- (47) CTFTransform cannot find SPSimplify. Fix to BeginPackage.
-
- (48) MagPhasePlot did not handle discontinuities well. Fixed.
-
- (49) Integral of Delta[t] over a finite interval. Fixed.
-
- (50) Continuous-time piecewise convolution works again.
-
- ------------------------- Version 2.44 --------------------------------
-
- (51) Made the forward and inverse continuous-time Fourier transforms
- use the same set of rules by exploiting the duality property.
-
- (52) Fixed the procedure that normalizes expressions in the inverse
- Laplace transform rule base
-
- ------------------------- Version 2.45 --------------------------------
-
- (53) Discrete convolution has been fixed.
-
- ------------------------- Version 2.5 ---------------------------------
-
- (54) Discrete and continuous Convolution has been fixed to work when
- one or more endpoints is infinite.
-
- (55) For SequencePlot of 1-D signals, the integer axis now is guaranteed
- to have integer ticks.
-
- (56) RationalGCD accepts the same style as Mathematica's GCD primitive.
- Specifically, RationalGCD no longer accepts a list of elements but
- instead has the form RationalGCD[e1, e2, ...].
-
- (57) Added the Multirate supporting functions ColumnHermiteForm and
- RowHermiteForm as well as LCLM, LCRM, GCRD, and GCLD.
-
- (58) Automatic simplification of expressions is no longer performed, but
- syntax checking is still automatic. Simplification is now handled
- by SPSimplify which augments the built-in routine Simplify. There
- are new routines that perform extensive rewriting of signal
- processing expressions as discussed below.
-
- (59) The evaluation of Needs[ "SignalProcessing`ObjectOriented`" ]
- will enable to attachment of properties to (parameterized) operators
- using the routine DefSystem. The default properties (ASSOCIATIVE,
- LINEAR, SHIFTINVARIANT, etc.) are kept in the variable SPproperties.
- They will have already been attached to Mathematica's built-in
- operators (Re, Im, Conjugate, Plus, and Times) and to the new
- operators (Shift, Upsample, etc.). Users can attach properties
- to their own or other existing operators.
-
- (60) Syntax checking and simplification rules have already been
- developed for the new signals (functions) and systems (operators).
- We have also developed a comprehensive set of rearrangement
- rules for signals and systems based on their properties.
- These are accessible by the routine SPRecursiveRewrite. Heuristic
- techniques will be added soon.
-
- ------------------------- Version 2.51 --------------------------------
-
- (61) SignalPlot supports exactly the same options as do Plot and Plot3D.
- Signal plots look better, too.
-
- (62) The Laplace transform rule bases now handle the Summation operator.
-
- ------------------------- Version 2.52 --------------------------------
-
- (63) Cleaned up definition of the Summation operator and Delta function.
-
- (64) Cleaned up SignalPlot's display of delta functions and a train of
- delta functions. Updated DeltaPlot, Arrow2D, and SignalPlot.
-
- ------------------------- Version 2.53 --------------------------------
-
- (65) Integration rules for Delta functions are now covered by
- DeltaIntegrate. Users can customize them (but first you
- will need to unprotect it).
-
- ------------------------- Version 2.54 --------------------------------
-
- (66) The inverse z-transform can now inverse the forward transform of
- a downsample operation.
-
- (67) The forward and inverse z-transforms handle more cases involving
- the Summation operator.
-
- (68) The forward z-transform handles affine step functions and the
- inverse z-transform more cleanly works around the shortcomings
- of Mathematica's Apart primitive by relying on MyApart to invert
- those transforms than Apart cannot handle.
-
- (69) Integration is now more robust for expressions involving continuous
- step (CStep) functions and continuous pulse (CPulse) forms.
-
- (70) A minor adjustment was made to DistinctCosetVectors function.
-
- ------------------------- Version 2.55 --------------------------------
-
- (71) Provided a "master" file for the signal processing extensions as
- to be compatible with the convention used by Mathematica's
- standard packages: use Needs["SignalProcessing`Master`"]
-
- (72) Inverse z-transform of the forward z-transform of Sin[b n] Step[n]
- returns Sin[b n] Step[n] as it used to do. The sequence of steps for
- the inverse z-transform has changed.
-
- OLD ORDER: rational pairs, non-rational pairs, partial fractions,
- pick off constants, additivity, delays, partial fractions
- (again), logarithm properties, downsampled sequence,
- multiplication by a^n, ....
-
- NEW ORDER: rational pairs, non-rational pairs, downsampled sequence,
- additivity in form of summation operator,
- multiplication by a^n, pick off constants, delays,
- additivity, normalize denominator, partial fractions,
- additivity in numerator, logarithm properties, ...
-
- (73) The routine TheFunction that converts signal processing expressions
- to formulas has been extended.
-
- (74) GetAllFactors, the function that helps determine if a variable
- in an expression has been scaled, is more robust. This helps the
- inverse z-transform properly handle the z-transform of functions
- like a^n Sin[b n] Step[n]. I have also improved ScalingFactor
- and UpsampleFactor so that the factors returned are independent
- of the variable being checked.
-
- ------------------------- Version 2.6 --------------------------------
-
- (75) Introduced a heuristic to apply rewrite rules intelligently
- called SPHeuristicRewrite.
-
- (76) CirclePS, used by the pole-zero plotting routine, now uses the
- built-in Graphics primitive Circle.
-
- (77) The inverse Laplace transform produces right-sided transforms
- more often. The problem was in Mathematica 2.0 because Apart
- (and therefore MyApart) does not normalize the denominator(s)
- after partial fractions. Also, the Similarity Property is
- correctly implemented as only to allow f(cs) to be rewritten
- when c > 0.
-
- (78) Regardless of the value of the Dialogue option, the transform
- rule bases will keep track of the assumptions made on the free
- parameters. They can be retrieved at any time by evaluating
- Assuming[All]. The set of conditions can be cleared by
- evaluating Assuming[].
-
- (79) The transform rule bases now print out assumptions made
- on parameters if the Dialogue option is set to All.
-
- (80) SignalPlot and SequencePlot handle periodic functions better,
- so Summation[i, -Infinity, Infinity, 1][CStep[1, t + 2 i]], or
- alternately Periodic[2,t][CStep[1,t]], plots correctly.
-
- (81) The TransformLookup option is more robust for all transforms.
-
- (82) You can now specify a list of symbols to treat as variables to
- SPSimplify by using the Variables option.
-
- (83) Improved DTFT Notebook that introduces Fourier analysis of
- sequences, the DTFT, and the DFT.
-
- ------------------------- Version 2.61 --------------------------------
-
- (84) The user-specified transform pairs are now put at the beginning
- of the rule base so that they override the built-in knowledge
- and they appear in proper order during dialogue. As a consequence,
- the forward and inverse Fourier transforms now properly handle
- the TransformLookup option for specifying new transform pairs.
-
- (85) The inverse z-transform can handle downsampled and upsampled
- signals again.
-
- (86) The assumptions made on free parameters during the taking of a
- linear transforms are displayed in a more meaningful way.
-
- (87) New operator called CircularShift which is an abstract form of
- the primitive RotateRight. It was introduced because of the
- new DFT transform pairs written into the DFT rule bases.
-
- (88) I have idiot-proofed the transform rule bases. So, if you typed
- something like LaPlace[ CStep[t], t s ] it would complain about
- t s because you meant t, s. This should help new users.
-
- ------------------------- Version 2.62 --------------------------------
-
- (89) The MagPhasePlot routine now takes the same options as Plot does.
- Furthermore, it works better under Mathematica 2.0.
-
- (90) The notation for PolyphaseDownsample and PolyphaseUpsample has
- changed to include the filter as a parameter. These operators
- are now single input, single output operators.
-
- (91) The rearrangement rules contained in SystemRewriteRules have been
- debugged, including the m-D versions of Crochiere and Rabiner's
- rules for 1-D multirate signal processing. Some rules were added.
-
- ------------------------- Version 2.63 --------------------------------
-
- (92) All of the system rearrangement and simplification rules listed
- in Appendix D of Myers' MIT thesis have been encoded in their
- original 1-D forms. The multidimensional analogs have been
- developed and encoded as well.
-
- (93) ConvertToList, which converts an algebraic form of a (piecewise)
- function into a list of F-intervals, is more robust. It now
- properly converts functions like the trapezoid function defined by
-
- (t+1) u(t+1) - t u(t) - (t-1) u(t - 1) + (t-2) u(t-2)
-
- where u(v) is the continuous step function. Before, it would
- have claimed that this function had infinite extent when in fact
- its extent is from t=-1 to t=2 inclusive.
-
- (94) Renamed "Multirate.m" as "LatticeTheory.m" and made the package
- independent from other signal processing packages.
-
- (95) added the number theoretic EuclidFactors to complement the routine
- BezoutNumbers. BezoutNumbers finds integers mu and lambda given
- integers a and b such that
-
- a mu + b lambda == gcd(a,b)
-
- (BezoutNumbers calls the Mathematica primitive ExtendedGCD.)
- EuclidFactors finds the integers mu and lambda given relatively
- prime integers p and q and any integer k so that
-
- p mu + q lambda == k
-
- EuclidFactors also works when p and q are integer matrices (in
- which case mu, lambda, and k become integer vectors).
-
- ------------------------- Version 2.64 --------------------------------
-
- (96) One of the simplification rules that handles the conjugation of
- complex exponentials dropped terms. It is fixed. Also, more
- simplification rules for complex exponentials have been added.
-
- (97) Under Mathematica 2.0, SPSimplify did not support the Trig option
- that Simplify supports.
-
- (98) For 1-D signals and sequences, SequencePlot and SignalPlot will
- plot a list of them on the same graph.
-
- (99) ZSolve switched the driving function and the difference equation
- when there were no initial conditions.
-
- (100) The continuous Fourier transform can handle filter sections again
- and even returns the proper region of convergence.
-
- ------------------------- Version 2.65 --------------------------------
-
- (101) Made RootLocus faster and more robust.
-
- (102) 2-D pole-zero root locus plots handle non-separable polynomials.
-
- (103) The DFT of impulses is faster
-
- (104) GetShiftFactor computes shift factors in an expression for a
- given variable.
-
- (105) The inverse Laplace transform rule base better handles shifts in
- the Laplace variable. For example, s is shifted by b below:
-
- InvLaPlace[ Sqrt[Pi] Exp[-2 Sqrt[a] Sqrt[b + s] / Sqrt[b + s], s ]
- -(a/t) - b t
- E CStep[t]
- ----------------------
- Sqrt[t]
-
- (106) The forward and inverse DFT, DTFT, and Laplace transform rule
- bases support an option called Definition. If set to True, then
- the rule base will apply the definition of the transform if all
- other attempts at the transform have failed.
-
- ------------------------- Version 2.66 --------------------------------
-
- (107) The convolution routines simplify expressions involving Delta and
- Impulse functions.
-
- (108) The Definition option has been implemented for the z- and Fourier
- transforms so now all of the rule bases have this option.
-
- ------------------------- Version 2.67 --------------------------------
-
- (109) When the Fourier transform cannot find a transform, it will try to
- apply the definition before it calls the Laplace transform rule
- bases. Also, the extra comma introduced in Version 2.66 at the
- end of the list of the Fourier transform rules has been removed.
-
- ------------------------- Version 2.68 --------------------------------
-
- (110) The forward z-transform recognizes common shifts in the discrete-
- time variable, e.g. (n + 1) f[n + 1].
-
- (111) Introduced ZPolynomial[m, n] which is an mth degree polynomial in n.
- It implements the property that the inverse z-transform of the mth
- derivative of F(z) is ZPolynomial[m, n] times f[n] shifted by m.
-
- (112) Simplification of conjugated polynomials carried out by SPSimplify
- has been enhanced. It now will show that H(z) = H*(z*) when H(z)
- is a rational polynomial having real-valued poles and zeroes.
-
- (113) PoleZeroPlot shades regions of convergence for the s-domain.
- Also, the DisplayFunction option is properly support so that
- you can redirect the output of the pole-zero plot to file via
-
- PoleZeroPlot[ s / ((s+1)(s+2)), s, -3, -2, False,
- DisplayFunction -> ( Display["pzplot1.mps", #1]& ) ]
-
- (114) SignalPlot for 1-D signals was generating the correct graphics
- but not plotting them on the screen. Fixed.
-
- ------------------------- Version 2.7 --------------------------------
-
- (115) Using the TransformLookup option for multidimensional transforms
- is now as straightforward as saying x[n1,n2] :> X[z1,z2], i.e.
- intermediate transform pairs (one per dimension) do not have
- to be specified.
-
- (116) The forward z-transform now transforms multidimensional upsampled
- and downsampled functions and properly adjusts the region of
- convergence. It also handles transforms of expressions like
- Upsample[l1,n1][ Upsample[l2,n2][ x[n1,n2 ] ]:
-
- In:= ZTransform[ Upsample[l1,n1][ Upsample[l2,n2][ x[n1,n2] ] ],
- {n1,n2}, {z1, z2},
- TransformLookup -> { x[n1,n2] :> X[z1,z2] } ]
- l1 l2
- Out= ZTransData[ X[z1 , z2 ], Rminus[{0, 0}],
- Rplus[{Infinity, Infinity}], ZVariables[{z1, z2}] ]
-
- (117) The forward DTFT handles multidimensional upsampled and downsampled
- signals. It also inverse transforms upsampled signals such as the
- diamond tile CPulse[2 Pi, w1 + w2 + Pi] CPulse[2 Pi, w1 - w2 + Pi]
- which is Upsample[{{1,1},{-1,1}}. {n1,n2}][ Sinc[Pi n1] Sinc[Pi n2] ]
- in the discrete-time domain.
-
- (118) Discontinued the functions MyTogether, NegExponent, and NormalizedQ.
-
- (119) GetAllFactors, the function that helps determine if a variable has
- been scaled in an expression, has been made more robust (again).
- It is used by the z and Laplace transforms.
-
- (120) Added the System property SEPARABLE
-
- (121) The best news is that many of the multidimensional capabilities
- have been decoupled from the signal processing packages so that
- only 1-D and simple m-D operations are initially loaded. The
- packages will load in m-D extensions to existing operators
- (e.g., z-transforms of multidimensional resampled signals) as
- needed. This strikes a balance in its use by researchers and
- students. That is, the SPP initial load the facilities useful
- to undergraduates. Additional features are loaded as needed.
-
- (122) SPSimplify works around an infinite loop in Mathematica's Simplify
- command. This error in Simplify causes both LSolve and DSolve to
- hang when solving some first-order DE's. LSolve no longer hangs
- because it uses SPSimplify.
-
- (123) Analog filters can now be specified completely by their poles.
- CIIR[t, Roots -> {-1, -2, -3}] would compute the missing coefficient
- list from the poles: CIIR[t, {6, 11, 6, 1}]. Similiarly,
- CFIR[t, Roots -> {-1, 0, 1}] gives CFIR[t, {0, -1, 0, 1}].
-
- (124) The time responses of analog filters can be plotted.
-
- (125) By default, MyApart will now root denominators of higher than
- fifth order numerically.
-
- ------------------------- Version 2.71 --------------------------------
-
- (126) When an improper region of convergence is given to PoleZeroPlot,
- it will now display a union of all possible combinations.
-
- (127) All linear symbolic transforms (z, LaPlace, etc.) are faster---
- the efficiency increase is proportional to the size of the
- expression being transformed. The speed of the transformation
- is now independent of the size of local information associated
- with each sub-expression.
-
- (128) The symbolic DFT is more robust.
-
- ------------------------- Version 2.72 --------------------------------
-
- (129) The signal processing Notebooks are finally compatible with the
- two versions of Mathematica (1.2/2.0).
-
- (130) Inverse DTFT's of transforms that are upsampled in the time domain
- now work under 2.0.
-
- (131) Values for signals that are upsampled in multidimensions can now
- be computed and plotted, e.g.
-
- SequencePlot[ Upsample[{{1, 1},{-1, 1}}, {n1,n2}][ Abs[n1 + n2] ],
- {n1, 0, 9}, {n2, 0, 9} ]
-
- (132) ASPAnalyze does a better job analyzing simple functions like sin(t).
-
- (133) The continuous-time Fourier transform communicates better with
- the Laplace transform rule base so more transforms can be resolved.
- Also, many CTFT transform pairs were fixed and enhanced.
-
- (134) Magnitude responses involving Dirac delta functions are properly
- displayed again.
-
- ------------------------- Version 2.73 --------------------------------
-
- (135) The plotting routines are now uniform in the way they convert Delta
- Delta functions, infinite summations, periodic operators, and other
- oddities into standard Mathematica expressions. The Extent1D
- routine has been improved and the SignalCleanup routine has been
- introduced.
-
- (136) The Aliasby operator is now always rewritten in terms of the
- Periodic operator.
-
- (137) The discrete-time Fourier transform (DTFT) has been made
- "mathematically correct" in that the forward transforms track
- the inherent periodicity. Normally, DTFT's are periodic with
- a period of 2 Pi, but resampled signals exhibit different
- periodicities.
-
- (138) The filter design routines automatically load additional routines
- when necessary.
-
- (139) PlotList has now been aliased to PiecewisePlot so as to reduce the
- confusion with ListPlot.
-
- ------------------------- Version 2.74 --------------------------------
-
- (140) There is a new global variable called $DeltaFunctionScaling that
- controls how the height of Delta functions are to be plotted.
- The heights are either scaled to be proportional to the areas
- under the Delta functions (Scaled) or are set to maximum value
- of the rest of the plot. The default option is Scaled which is
- the way students learn to plot Delta functions.
-
- (141) Arrows representing Delta functions are drawn in a more uniform way.
- Downward and upward arrows are drawn according to the sign of the
- fourth parameter to Arrow2D.
-
- (142) Sampling with infinite impulse trains is now implemented as a part
- of the forward and inverse Fourier transform rule bases. Infinite
- impulse trains in continuous time are represented either as
- Summation[n, -Infinity, Infinity, 1][Delta[t + T n]] or as
- Periodic[T,t][Delta[t]] where T is the sampling period, n is an
- integer (index) variable, and t is the continuous-time variable.
-
- ------------------------- Future Plans --------------------------------
-
- (143) The old way to convert signal processing expressions to formulas was
- to use TheFunction. That is still supported, but the functionality
- of TheFunction has been transferred to Mathematica's Normal routine.
-
- (144) Upsample and Downsample should take an optional third argument,
- namely a reindexing symbol.
-
- (145) Generating C/SPOX code for algorithms
-
- (146) Providing an algorithm design environment for linear multidimensional
- multirate systems (at the level of saying "write thesis")
-
- Because of changes (1), (5), and (6), we can recreate (for the
- most part) the pictorial dictionary of Fourier transforms in
- chapter 19 of Bracewell's book entitled "The Fourier Transform and
- Its Applications".
-
- Because of changes (9) and (12) and because of subtle modifications to
- the ExtractVariables object, DSPAnalyze now works correctly for
- IIR and FIR structures.
-
- I have included a release of all of the files that compose the
- signal processing packages. We have updated all of the notebooks
- because of the above changes. We have included all eight notebooks.
-
- The signal processing packages alter these standard Mathematica functions:
-
- (a) Integrate so that it can handle generalized functions like the
- Dirac delta (Delta) and functions with discontinuities like
- continuous-time step (CStep) and pulse (CPulse) functions.
- (b) Simplify applied to an And expression removes redundant conditions
- (c) Det of a number is that number
- (d) Dot product of two numbers is the product of the two numbers
- (e) The TeX forms of Re and Im primitives are Re and Im instead of
- R and I.
- (f) Under Mathematica 2.0, the default options for the Limit operator have
- been changed to { Analytic -> True, Direction -> Automatic }.
-